La natura dell'omoinicità
Linguaggio omoinico: Un linguaggio in cui la rappresentazione interna è espressa nel linguaggio stesso. In Elixir, il codice sorgente non è solo testo; è una struttura dati annidata nota come Albero sintattico astratto (AST).
1. Regole logiche di rappresentazione
Elixir semplifica l'AST rappresentando i valori letterali fondamentali come tali stessi. Atomi, numeri, liste (inclusi elenchi con chiave), stringhe binarie e tuple con due elementi vengono rappresentati internamente senza avvolgimento complesso.
[do: 1]
iex> quote do: "binaries"
"binaries"
2. Struttura della tupla dell'AST
La maggior parte delle trasformazioni del codice produce una tupla con tre elementi: {nome_funzione, metadati, argomenti}. Ad esempio, una chiamata di funzione come 1 + 2 diventa {:+, [line: 1], [1, 2]}. Questo permette al linguaggio di trattare Codice come dati.
3. Macro: Ritardo nell'esecuzione
Le macro sono "un modo per ritardare l'esecuzione di clausole inserendo codice nella rappresentazione interna del nostro programma." Mentre le funzioni standard valutano gli argomenti prima di chiamata, le macro ricevono l' AST grezzo, consentendo l'inserimento di logica prima della compilazione.
$$\text{Codice sorgente} \xrightarrow{\text{Quote}} \text{Tupla AST} \xrightarrow{\text{Macro}} \text{AST trasformato}$$